﻿using IoT3Week1.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace IoT3Week1.EfCore
{
    /// <summary>
    /// 定义一个泛型类去实现泛型接口IRepository<T>
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BaseRepository<T> : IRepository<T> where T : class  //加了一个泛型约束，约束T类型必须是引用类型
    {
        //定义一个私有的只读的字段
        private readonly MyDbContext _db;

        public BaseRepository(MyDbContext myDbContext)
        {
            _db = myDbContext; //依赖注入
        }

        public int Add(T model)
        {
            _db.Set<T>().Add(model);    // Set<T>() 是一个泛型方法 作用是获取T模型类所对应的数据集合DbSet<T>
            return _db.SaveChanges();
        }

        public int Delete(int id)
        {
            //根据主键id进行查询
            T obj = _db.Set<T>().Find(id);
            //删除
            _db.Set<T>().Remove(obj);

            return _db.SaveChanges();
        }

        public List<T> GetAll()
        {
            return _db.Set<T>().ToList();
        }

        public int Update(T model)
        {
            _db.Set<T>().Update(model);  //Ef Core里边的修改方法
            return _db.SaveChanges();
        }
    }
}
